1.Primero y último: Crea una función que dada un string, remueva el primer y último caracter.
Ejemplo:
remuevePrimerYUltimoCaracter('hola') // "ol"
Solución:
const remuevePrimerYUltimoCaracter = (str) => str.slice(1, -1)
2.Encuentra el más pequeño: Dado un array de números, haz que la función devuelva el más pequeño entre ellos.
Ejemplo:
const arr = [ 33, 2, 12, 65 ]
encuentraElMasPequeño(arr) // 2
Solución:
const encuentraElMasPequeño = (arr) => Math.min.apply(null, arr)
💡 Nota: Math.min no acepta matrices, por lo que se le debe agregar apply. El primer argumento de apply hace referencia al this dentro de esa función. Pero como en este caso no es necesario usarlo, se puede pasar
null
oundefined
y actuará igual.
3.Sumando: Escribe una función que encuentre el resultado de sumar cada número del 1 al parámetro dado.
Ejemplo:
sumando(2) -> 3
1 + 2
Solución:
const sumando = (num) => {
let result = 0;
for (let i = 1; i <= num; i++) result += i;
return result;
}
4.Siglo: Escribe una función que devuelva el siglo del año dado.
Ejemplo:
sigloDeAño(1900) returns (19)
Solución 1:
function sigloDeAño(año) {
const siglo = año / 100
if (año % 100 === 0) {
return siglo
}
return Math.floor(siglo)+ 1
}
Solución 2:
const sigloDeAño = año => Math.ceil(año/100)
💡 Nota: Math.ceil lo que hace es redondear el número dado, luego lo dividimos entre 100 para que nos de el siglo
5.Contando ovejas: Dado un array, escribe un programa que devuelva el número de ovejas presentes (true).
Ejemplo:
[true, true, true, false,
true, true, true, true ,
true, false, true, false,
true, false, false, true ,
true, true, true, true ,
false, false, true, true]
Solución:
const contandoOvejas = rebaño => rebaño.filter(Boolean).length
💡 Nota: Usamos la palabra
Boolean
para preguntar si es untrue
, el filter nos devuelve un array nuevo excluyendo losfalse
y finalmente.length
para saber la cantidad de ovejas presentes.
6.Operaiones simples: Crea una función que acepte dos valores y un símbolo para ejecutar las operaciones matemáticas básicas.
Ejemplo:
operacionBasica('*', 5, 5) // 25
Solución 1:
const operacionBasica = (operacion, valor1, valor2) => {
switch (operacion) {
case '+':
return valor1 + valor2
break;
case '-':
return valor1 - valor2
break;
case '*':
return valor1 * valor2
break;
case '/':
return valor1 / valor2
break;
default: return valor1 + valor2
}
}
Solución 2:
const operacionBasica = (operacion, valor1, valor2) => eval(valor1+operacion+valor2)
La función eval evalúa un string y lo ejecuta.
- Es divisible: Crea una función que chequee si un número es divisible entre los parametro x, y dados.
Ejemplo:
n = 12, x = 2, y = 6 => true // porque 12 es divisible entre 2 y 6
Solución:
const esDivisible = ( num, x, y ) => ( num % x === 0 && num % y === 0 )
8.Par o impar: Crea una función devuelva si un número es par o impar
Ejemplo:
parOimpar(3) //Impar
Solución:
const parOimpar = num => ( num % 2 === 0 ) ? 'Par' : 'Impar'
- Palabras reversas: Implementa una función que acepte un string como parámetro y devuelva todas las palabras del string en reverso, respetando los espacios.
Ejemplo:
"¡Esto es un ejemplo!" ==> "¡otsE se nu !olpmeje"
Solución:
const invertirPalabras = str => {
return str.split(' ').map(word => word.split('').reverse().join('')).join(' ')
}
- FizzBuzz: Escribe un programa imprima todos los números del 1 a 100, con dos excepciones. Para números divisibles por 3, imprima "Fizz" en lugar del número, y para los números divisibles entre 5 (y no 3), imprima "Buzz" en su lugar. Cuando lo tengas funcionando, modifica tu programa para imprimir "FizzBuzz", para los números que son divisibles entre 3 y 5
Solución 1:
const FizzBuzz = () => {
for (i = 1; i <= 100; i++) {
let mensaje = ''
if(i % 3 === 0 && i % 5 === 0) {
mensaje = 'FizzBuzz'
} else if (i % 3 === 0) {
mensaje = 'Fizz'
} else if (i % 5 === 0) {
mensaje = 'Buzz'
} else {
mensaje = i
}
console.log(mensaje)
}
}
Solución 2:
const FizzBuzz = () => { for (i = 1; i <= 100; i++) { let mensaje = '' switch (true) { case (i % 3 === 0 && i % 5 === 0): mensaje = 'FizzBuzz' break;
case (i % 3 === 0):
mensaje = 'Fizz'
break;
case (i % 5 === 0):
mensaje = 'Buzz'
break;
default:
mensaje = i
}
console.log(mensaje)
}
}
Solución 3:
const isMultiple = (num, mod) => num % mod === 0
const FizzBuzz = () => {
for (i = 1; i <= 100; i++) {
let mensaje = ''
switch (true) {
case isMultiple(i, 15):
mensaje = 'FizzBuzz'
break;
case isMultiple(i, 3):
mensaje = 'Fizz'
break;
case isMultiple(i, 5):
mensaje = 'Buzz'
break;
default:
mensaje = i
}
console.log(mensaje)
}
}
Esta es la opción más mantenible, ya que permite que puedas agregar más posibles casos en un futuro.
- Suma de múltiplos: Crea una función devuelva las suma de todos los múltiplos de 3 y 5, contando desde el parámetro dado
Ejemplo:
findSum(5) // 8 (3 + 5)
Solución 1:
const findSum = (n) => {
let result = 0
for (let i = 0; i <= n; i++) {
if (i % 3 === 0 || i % 5 === 0) {
result = result + i
}
}
return result
}
Solución 2:
const isMultiple = (num, mod) => num % mod === 0
const findSum = (n) => {
let result = 0
for (let i = 0; i <= n; i++) {
switch (true) {
case isMultiple(i, 3):
result = result + i
break;
case isMultiple(i, 5):
result = result + i
break;
default: result = result
}
}
return result
}
Más mantenible a largo plazo porque podemos agregar más casos en un futuro de manera mas fácil.
- Duplicado: Dado un array, crea una función que devuelva el mismo duplicado.
Ejemplo:
duplica([1,2,3,4,5]); // [1,2,3,4,5,1,2,3,4,5]
Solución:
const duplica = arr => {
result = arr
arr.map( item => {{
result.push(item)
}})
return result
}
- Variable global accidental: ¿Cuál es el resultado de
typeof a
ytypeof b
de acuerdo con el siguiente código?
Código:
function foo() {
let a = b = 0;
a++;
return a;
}
foo();
typeof a; // => ???
typeof b; // => ???
Solución:
typeof a; // => 'undefined'
typeof window.b; // => 'number'
-
let a = b = 0
declara una variable local a, pero también una global con b. -
Como no hemos declarado explicitamente la variable b, JavaScript lo interpreta
b = 0
comowindow.b = 0
, por lo que su scope es global. -
Como resultado esto es lo que se interpreta:
``` function foo() { let a; window.b = 0; a = window.b; a++; return a; } ```
-
Por lo tanto,
typeof a
esundefined
.a
existe dentro del scope de foo() y no esta disponible fuera de ella. En cambiob
, al ser una variable global, devuelve'number'
.
- Array length: Cual es el valor de ropa[0]:
Código:
const ropa = ['chaqueta', 'camiseta'];
ropa.length = 0;
ropa[0]; // => ???
Solución:
ropa[0] es igual a `undefined` ya que cuando se ejecuta `ropa.length = 0` se eliminan todos los elementos del array.
- Ojo de águila: Cuál es el contenido de
numbers
:
Código:
const length = 4;
const numbers = [];
for (var i = 0; i < length; i++);{
numbers.push(i + 1);
}
numbers; // => ???
Solución:
El `;` que va después de `for (var i = 0; i < length; i++)` provoca que el for loop sea nulo, por lo que no se ejecuta `numbers.push(i + 1);`
const length = 4;
const numbers = [];
var i;
for (i = 0; i < length; i++) {
// does nothing
}
{
// a simple block
numbers.push(i + 1);
}
numbers; // => [5]
Lo que en realidad sucede es que i
aumenta 4 veces y luego se pasa a la parte del código en donde se agrega al array de numbers
, resultando en 5.
- Semicoma automática: ¿Qué devuelve esta función?:
Código:
function arrayFromValue(item) {
return
[item];
}
arrayFromValue(10); // => ???
Solución:
La función devuelve `undefined` porque `[item];`esta en la siguiente línea, por lo que JavaScript entiende:
function arrayFromValue(item) {
return;
[item];
}
arrayFromValue(10); // => undefined
- Pangrama: Un pangrama es una oración que contiene cada letra del alfabeto al menos una vez. Por ejemplo, la oración "El zorro marrón rápido salta sobre el perro perezoso" es un pangrama, porque usa las letras A-Z al menos una vez (el caso es irrelevante).
Dada una cadena, detecta si es o no un pangrama. Devuelve True si es así, False si no. Ignorar números y puntuación.
Solución 1:
function isPangram(string){
const alphabeth = ('abcdefghijklmnopqrstuvwxyz').split('')
return alphabeth.every(x => string.toLowerCase().includes(x))
}
Solución 2:
const abc = 'abcdefghijklmnopqrstuvwxyz'
const isPangram = (string) => {
const processedString = [...new Set(string.toLowerCase().split(' ').join(''))].sort().join('')
console.log(abc===processedString)
}
-
esPrimo - Crea una función que devuelva
true
ofalse
dependiendo del número que pases como parámetro. Ejemplo:esPrimo(0) // false esPrimo(1) // false esPrimo(17) // true esPrimo(10000000000000) // false
Solución:
const esPrimo = (num) => {
for (let i = 2; i < num; i++) {
if (num % i === 0) {
return false;
}
return true;
}
-
Producto de elementos adyacentes - Crea una función que devuelva el mayor producto de dos elementos adyacentes en el array dado. Ejemplo:
inputArray = [3, 6, -2, -5, 7, 3] adjacentElementsProduct(inputArray) = 21 //7 y 3 producen el producto más mayor.
Solución:
function adjacentElementsProduct(arr) {
return Math.max( ...arr.slice(1).map(( x, i ) => [ x * arr[i]]))
}
-
Letra repetida - Encuentra la primera letra que se repita dado una cadena de texto, si no se repite ninguna devuelve
-1
:firstRepeat("Gandalf") ➞ "a"
Solución:
function firstRepeat(str) {
for (i = 1; i < str.length; i++) {
if (str.slice(0,i).includes(str[i])) {
return str[i]
}
}
return '-1'
}
-
Número de caractéres - Dada una cadena de texto (s) y una letra (c), devuelde el número de veces que aparece c en s.
numberOfCharacters(‘oh heavens’, ‘h’) 2
Solución:
function numberOfCharacters(s, c) {
let counter = 0
const character = c.toLowerCase()
const str = s.trim().toLowerCase().split('')
str.forEach( x => x === character ? ++counter : counter )
return counter
}
numberOfCharacters('woaw', 'W') // 2
-
Llamada a API - Haz una llamada a la API y obten información de los usuarios. Implementa una función que devuelve solo los nombres y emails de los usuarios que tengan una
m
en su nombre.consolo.log(getUsers('https://jsonplaceholder.typicode.com/users')) //[{name: Maria, email: [email protected]}, {name: Jaime, email: [email protected]}]
Solución:
const getUsers = async () => {
const response = await fetch('https://jsonplaceholder.typicode.com/users')
const users = await response.json()
const result = users.filter( user => user.name.toLowerCase().includes('m')).map( user => ({ name: user.name, email: user.email }))
return result
}
- Isograma - Dada una palabra, chequea si es un isograma o no.
Un isograma es una palabra en la que no se repiten letras.
isIsogram('hilo')// true
Solución:
const isIsogram = (str) => {
const lowerCased = str.toLowerCase()
const result = lowerCased.split('').every((letter, i) => {
lowerCased.indexOf(letter) === i
})
return result
}
24.Año bisiesto - Crea una función que, dado un año, devuelva si este es bisiesto o no.
Los años bisiestos ocurren cada cuatro años (aquellos divisibles entre cuatro), exeptuando los cientos a menos de que sea divisible entre 400
isLeapYear('2020')// true
Solución:
const isLeapYear = (year) => {
const yearInNumber = Number(year)
return yearInNumber % 100 === 0 ? yearInNumber % 400 === 0 : yearInNumber % 4 === 0
}
25.*Encode/Decode** - Crea una función encode
que tome un string
como parámetro e implemente el patrón 'Run-length'.
El patrón Run-length toma los elementos consecutivos y los reemplaza por el valor seguido del número de veces que aparece.
encode('hhqqq')// h2q3
Solución:
const encode = (string) => {
return string.replace(/(\w)\1+/g, (m,v) => `${m.length}${v}`)
}
const decode = (string) => {
return string.replace(/(\d+)(\w)/g, (x,y,z) => z.repeat(y))
}
26.*Elimina duplicados** - Dado un array
, implementa una función que remueva los elementos duplicados usando array.reduce()
removeDuplicates(['perro', 'perro', 'gato']) // ['perro', 'gato']
Solución:
const encode = (arr) => {
return arr.reduce(( accumulator, value ) => {
return accumulator.includes(value) ? accumulator : [ ...accumulator, value ]
}, [])
}